﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Configuration;
using System.Xml;

namespace ControlPresupuesto
{
    public partial class FrmLogin : Form
    {
        public ControlPresupuestoDataSet.spSeguridadUsuarioDataTable DatosUsuario = new ControlPresupuestoDataSet.spSeguridadUsuarioDataTable();
                
        public FrmLogin()
        {
            InitializeComponent();

            //--- Coloco como titulo el nombre de la empresa
            this.Text = Utils.get().getValorParametro("NombreEmpresa");

            //--- Esto es solo para agilizar las pruebas cuando estoy desarrollando
            if (System.Environment.MachineName.Equals("AWILCHES") && System.Environment.UserName.Equals("awilches"))
            {
                this.UsuarioTextBox.Text = "ADMIN";
                this.PasswordtextBox.Text = "ADMIN";
            }
        }

        private void TextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.Equals(Keys.Enter))
            {
                this.Ingresar();
            }
            if (e.KeyCode.Equals(Keys.Escape))
            {
                this.Close();
            }
        }

        private void FrmLogin_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.Equals(Keys.Enter))
            {
                this.Ingresar();
            }
            if (e.KeyCode.Equals(Keys.Escape))
            {
                this.Close();
            }
        }

        private void ingresarButton_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode.Equals(Keys.Enter))
            {
                this.Ingresar();
            }
            if (e.KeyCode.Equals(Keys.Escape))
            {
                this.Close();
            }
        }  

        private void ingresarButton_Click(object sender, EventArgs e)
        {
            this.Ingresar();
        }

        private void Ingresar()
        {
            //--- verifico la informacion de acceso
            if (this.UsuarioTextBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor digite el usuario");
                return;
            }
            if (this.PasswordtextBox.Text.Trim().Equals(string.Empty))
            {
                MessageBox.Show("Por favor digite el Contraseña");
                return;
            }

            try
            {
                //--- SI se esta ejecutando otro proceso de esta aplicacion Verifico el usuario que esta activo y si el usuario activo
                //--- es distinto al que esta intentando iniciar session le notifico al usuario que no puede tener activas varias sessiones en el mismo PC
                System.Diagnostics.Process[] p = System.Diagnostics.Process.GetProcessesByName(System.Diagnostics.Process.GetCurrentProcess().ProcessName);
                if (p.Length > 1)
                {
                    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings[Utils.get().getValorParametro("SeccionAppConfigControlPresupuestoConnectionString")].ConnectionString;
                    DataTable table = new DataTable();
                    table.TableName = this.tittle.Text;
                    using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(connectionString))
                    {
                        conn.Open();
                        System.Data.SqlClient.SqlCommand command = conn.CreateCommand();
                        command.CommandText = "SELECT [dbo].[fnGetUsuarioSession]() AS USUARIO";
                        table.Load(command.ExecuteReader());
                        conn.Close();
                    }
                    if (table.Rows.Count > 0)
                    {
                        if (!table.Rows[0][0].ToString().Equals(this.UsuarioTextBox.Text.Trim()))
                        {
                            if (MessageBox.Show("El usuario " + table.Rows[0][0].ToString() + " Se encuentra activo en este Equipo. \nSí inicia sesión con el usuario " + this.UsuarioTextBox.Text + " se cerraran las demas ventanas. \nDesea Cerrar las otras instancias de la aplicación?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                            {
                                ManageForms.closeAllForms();
                                return;
                            }

                            for (int i = 0; i < p.Length; i++)
                            {
                                if (p[i].Id != System.Diagnostics.Process.GetCurrentProcess().Id)
                                {
                                    p[i].Kill();
                                    p[i].WaitForExit();
                                }
                            }
                        }
                    }
                }


                //--- Valido los datos

                this.spSeguridadUsuarioTableAdapter1.FillBy(
                    DatosUsuario,
                    "Login",
                    null,
                    null,
                    null,
                    null,
                    this.UsuarioTextBox.Text.Trim(),
                    null,
                    Utils.get().Encrypt(this.UsuarioTextBox.Text.Trim(), this.PasswordtextBox.Text.Trim(), false),
                    null);
            }
            catch (Exception ex)
            {
                //--- Usuario no registrado
                MessageException.show(ex);
                return;
            }
            this.Close();
        }
    }
}
